/**
 *
 *  Copyright (c) 2011, AstroDAbis
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without modification,
 *  are permitted provided that the following conditions are met:
 *
 *      * Redistributions of source code must retain the above copyright notice,
 *        this list of conditions and the following disclaimer.
 *      * Redistributions in binary form must reproduce the above copyright notice,
 *        this list of conditions and the following disclaimer in the documentation
 *        and/or other materials provided with the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 *  OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
package org.jiscinvolve.astrodabis.mallow.model.test.alpha;

import org.junit.Test;

import java.util.Iterator;
import java.io.FileInputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.factory.annotation.Autowired;


import org.jiscinvolve.astrodabis.mallow.model.api.Tag;
import org.jiscinvolve.astrodabis.mallow.model.api.Account;
import org.jiscinvolve.astrodabis.mallow.model.api.JoinTag;
import org.jiscinvolve.astrodabis.mallow.model.api.JoinTagData;
import org.jiscinvolve.astrodabis.mallow.model.api.JoinTagParser;
import org.jiscinvolve.astrodabis.mallow.model.api.JoinTagFactory;

import org.jiscinvolve.astrodabis.mallow.model.tap.TapJoin;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapTable;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapService;

import org.jiscinvolve.astrodabis.mallow.model.tap.TapTableBeanImpl;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapServiceBeanImpl;

import org.jiscinvolve.astrodabis.mallow.impl.model.jpa.PersistentManagerExtra;

import org.jiscinvolve.astrodabis.mallow.model.api.JoinTagData;
import org.jiscinvolve.astrodabis.mallow.model.api.JoinTagParser;

import org.jiscinvolve.astrodabis.mallow.impl.model.vot.VOTableJoinTagParser;
import org.jiscinvolve.astrodabis.mallow.impl.model.vot.SimpleVOTableJoinTagParser;

import org.jiscinvolve.astrodabis.mallow.model.TestBase;

import org.jiscinvolve.astrodabis.mallow.model.test.*;


/**
 *
 *
 */
public class AlphaTagTestCase
extends TestBase
    {

    /**
     * Our debug logger.
     * 
     */
    private static Log log = LogFactory.getLog(AlphaTagTestCase.class);

    @Autowired
    private AlphaRowFactory rows;

    @Test
    public void frog001()
    throws Exception
        {
        log.debug("Creating JoinTagParser");

PersistentManagerExtra mx = (PersistentManagerExtra) manager();

        TestColumn col = new AlphaColumnImpl(
            "junit-test-column"
            );
        mx.template().save(
            col
            );

        for (int i = 0 ; i < 100 ; i++)
            {

            JoinTagParser parser = new SimpleVOTableJoinTagParser(
                null,
                null,
                new FileInputStream(
                    "src/test/data/join-test-001.xml"
                    )
                );

            log.debug("Iterating JoinTagParser");


            while(parser.hasNext())
                {
                JoinTagData data = parser.next();
                log.debug(
                    "Data [" + data.p1() + "][" + data.p2() + "][" + data.name() + "][" + data.value() + "]"
                    );

                TestRow r1 = rows.create(
                    col,
                    data.p1()
                    );

                TestRow r2 = rows.create(
                    col,
                    data.p2()
                    );

                TestJoin j1 = new AlphaJoinImpl(
                    r1, r2
                    );

                TestJoinTag t1 = new AlphaJoinTagImpl(
                    j1,
                    data.name()
                    );

//                mx.template().saveOrUpdate(r1);
//                mx.template().saveOrUpdate(r2);
                mx.template().saveOrUpdate(j1);
                mx.template().saveOrUpdate(t1);

                }

            log.debug("Finished JoinTagParser");

            }
        }

    }

